/*
 * JTreePersonal.java
 *
 * Created on 27 de diciembre de 2005, 0:57
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package fmap.gui.jTreePersonal;

import fmap.gui.actionListener.ListenerJTreeResultSearch;
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.tree.TreeCellRenderer;

/**
 *
 * @author javi
 */
public class JTreeResultSearch extends JTree
{
    
    
    public JTreeResultSearch ()
    {
        
        setCellRenderer (new MiRendererDeArbol ());
        
        /** Establecemos el alto de la fila */
        setRowHeight (15);
        setBorder ( new EmptyBorder (5,5,0,0) );
        
        /** Para poder utilizar el tooltip en los nodos debemos registrar este componente en la clase ToolTipManager */
        ToolTipManager.sharedInstance ().registerComponent (this);
        
        /** Hacemos esto para que podamos mostrar un popupmenu */
        enableEvents ( AWTEvent.MOUSE_EVENT_MASK );
        
//        addMouseListener ( new ListenerJTreeResultSearch());
        addTreeSelectionListener ( new ListenerJTreeResultSearch () );
    }
    
    
    public void expandTree ()
    {
        int numFilas = this.getRowCount ();
        
        for(int i=1; i<numFilas; i++)
        {
            this.expandRow (i);
            
            if(this.getRowCount () > numFilas) numFilas = this.getRowCount ();
            
        }
    }
    
    /*
     * Esta es la clase que va a permitir personalizar la presentacion
     * de cada una de las ramas del arbol, de forma que no solamente
     * tengamos el texto correspondiente a la carta, o palo de la
     * baraja, sino un icono mostrando su imagen
     */
    public class MiRendererDeArbol extends JLabel implements TreeCellRenderer
    {
        private boolean seleccionado;
        
        public MiRendererDeArbol ()
        {
        }
        
        
        public Component getTreeCellRendererComponent ( JTree arbol,
                Object valor,boolean seleccionado,boolean expandido,
                boolean rama,int fila,boolean conFoco )
        {
            
            /**
             * Se fija el color de fondo en funci�n de que est� o no
             * seleccionada la celda del �rbol
             */
            setForeground (UIManager.getColor ("Table.selectionForeground"));
            
            if( !seleccionado )
                setBackground (UIManager.getColor ("Tree.background"));
            else
                setBackground (UIManager.getColor ("Tree.selectionBackground"));
            
            
            /**
             * Fijamos el icono que corresponde al texto de la celda, para
             * presentar la imagen de la carta que corresponde a esa celda
             * Si el nodo es root mostramos la imagen de la coleccion si el nodo es un cd mostramos la imagen del cd
             */
            if(valor instanceof fmap.model.MapF)
            {
                fmap.model.MapF cd = (fmap.model.MapF)valor;
                
                setIcon ( new ImageIcon ( getClass ().getResource (cd.getIcon ())) );


                if( cd.getEstado () == 4 )
                {
                    setFont (new java.awt.Font ("Dialog", java.awt.Font.BOLD, 12));
                    setForeground (new java.awt.Color (16, 191, 11));
                }
                else                        setFont (new java.awt.Font ("Dialog", java.awt.Font.PLAIN, 12));
            }
            else if(valor instanceof fmap.model.Node)
            {
                fmap.model.Node node = (fmap.model.Node)valor;
//                setIcon ( UIManager.getIcon ("FileView.directoryIcon") );
                setIcon ( new ImageIcon ( getClass ().getResource (node.getIcon ())) );
                setFont (new java.awt.Font ("Dialog", java.awt.Font.PLAIN, 12));
                
                
                if( node.getNameFound ().equals ("1") )
                {
                    setFont (new java.awt.Font ("Dialog", java.awt.Font.BOLD, 12));
                    setForeground (new java.awt.Color (16, 191, 11));
                }
                
//                setToolTipText (node.getDateString ());
                setToolTipText ( node.getPath () );
            }
            
            setText (valor.toString ()+"  ");
            
            this.seleccionado = seleccionado;
            
            return( this);
        }
        
        
        /**
         * Sobreescribimos el m�todo paint() para fijar el color de
         * fondo. Normalmente, un JLabel puede pintar su propio fondo,
         * pero, seguramente debido aparentemente a un bug, o a una
         * limitaci�n en el TreeCellRenderer, es necesario recurrir
         * al m�todo paint() para hacer esto
         */
        public void paint ( Graphics g )
        {
            Color color;
            Icon currentI = getIcon ();
            
            // Fijamos el colos de fondo
            color = seleccionado ? UIManager.getColor ("Tree.selectionBackground") : UIManager.getColor ("Tree.background");
            
            g.setColor ( color );
            
            /**
             * Rellenamos el rect�ngulo que ocupa el texto sobre la celda del �rbol
             */
            g.fillRect ( currentI.getIconWidth ()+2,0,getWidth ()+10,getHeight ()-1 );
            
            super.paint ( g );
        }
    }
}
